"""
一些工具模块
"""
import asyncio
from .response import *


class Singleton:
    """
    单例
    """
    def __new__(cls, *args, **kwargs):
        if not hasattr(cls, "instance"):
            cls.instance = super().__new__(cls, *args, **kwargs)

        return cls.instance


async def await_task(task, *args):
    """
    构造一个异步任务，原理上其实是线程池， 并没有 io异步；
    这里的 run_in_executor 第一个参数传None代表使用默认的线程池对象
    线程池大小为默认的 cpu核心数的5倍
    :param task:
    :param args:
    :return:
    """
    loop = asyncio.get_event_loop()
    return await loop.run_in_executor(None, task, *args)
